package com.tomato.rpc.serialize.common;

/**
 * 序列化接口
 *
 * @author lizhifu
 * @since 2023/5/31
 */
public interface Serializer {

	/**
	 * 序列化
	 * @param obj 要序列化的对象
	 * @return {@code byte[]}
	 */
	<T> byte[] serialize(T obj);

	/**
	 * 反序列化
	 * @param bytes 序列化后的字节数组
	 * @param clazz 目标类
	 * @param <T> 类的类型。举个例子, {@code String.class} 的类型是 {@code Class<String>}.
	 * 如果不知道类的类型的话，使用 {@code Class<?>}
	 * @return 反序列化的对象
	 */
	<T> T deserialize(byte[] bytes, Class<T> clazz);

}
